home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
001
/
tstcom.lqr
/
TSTCOM.LBR
/
tstcom2.c
< prev
Wrap
Text File
|
2011-02-04
|
4KB
|
124 lines
/*
* tstcom2.c 31 Oct 83 Craig Milo Rogers at USC/ISI
*
* This program tests the COM: communications package
* by using it as a TTY Telnet box. Both COM: ports are used
* for a single connection. COM1: is the user port, and COM2:
* is the server port.
*/
#define M_TSTCOM
#include "stdio.h"
#include "truth.h"
#include "beauty.h"
#define TNESCAPE 0036 /* "Telnet" escape char: control-uparrow. */
#define RBUFLEN 4096 /* Receive buffer length. */
#define TBUFLEN 512 /* Transmit buffer length. */
static char rbuf1[RBUFLEN]; /* Receive data buffer. */
static char tbuf1[TBUFLEN]; /* Transmit data buffer. */
static char rbuf2[RBUFLEN]; /* Receive data buffer. */
static char tbuf2[TBUFLEN]; /* Transmit data buffer. */
main(argc,argv)
int argc; /* Number of arguments. */
char *argv[]; /* Pointers to argument strings. */
{
int rate; /* Baud rate in bps. */
int divisor; /* Baud rage generator divisor. */
int c; /* Holds a data character. */
bool sawesc; /* Indicates that ctrl-q was last char. */
bool running; /* FALSE indicates exit request. */
int i; /* Counter. */
int unit; /* COM: unit number. */
if (argc < 2) { /* Not enough args, give help message. */
fprintf(stderr, "usage: tstcom2 baudrate\n");
exit(1);
}
rate = 0;
sscanf(argv[1], "%d", &rate);
if ((divisor = getdivisor(rate)) == 0) {
fprintf(stderr, "tstcom2: Unrecognized baud rate.\n");
exit(1);
}
/* Initialize COM1: and COM2:. */
int_ini(); /* Start with interrupt package. */
com_ini(1, divisor, tbuf1, TBUFLEN, rbuf1, RBUFLEN);
com_ini(2, divisor, tbuf2, TBUFLEN, rbuf2, RBUFLEN);
sawesc = FALSE; /* Start off with normal data. */
running = TRUE; /* Running the glass tty. */
unit = 2; /* Destination is COM2:. */
while (running) { /* Until we decide to exit: */
if (com_icnt(1) != 0) { /* Got a character? */
c = com_getc(1); /* Pick up the character. */
if (sawesc) { /* Did we just see a telnet escape? */
sawesc = FALSE; /* Cancel the saw-escape flag. */
switch (c &0177) { /* Dispatch to command processor. */
case TNESCAPE: /* A second escape char. */
com_putc(unit, c); /* Pass it through. */
break;
case 'b': /* A request to send BREAK. */
case 'B':
com_break(unit);
break;
case 'c': /* The "close" command. */
case 'C':
case 'e': /* The "exit" command. */
case 'E':
case 'q': /* The "quit" command. */
case 'Q':
running = FALSE;
continue;
default: /* Complain about bad char. */
com_putc(1, 0007); /* Ring the "bell". */
break;
}
} else { /* Otherwise, didn't see escape prev. */
switch (c &0177) { /* Dispatch to character processor. */
case TNESCAPE: /* Process "Telnet" escape char. */
sawesc = TRUE; /* Set saw-escape flag. */
break;
default: /* Otherwise, send to COM1: as is. */
com_putc(unit, c); /* Ignore errors. */
}
}
}
for (i = com_icnt(unit); i > 0; i--) {
c = com_getc(unit); /* Get a COM2: character. */
com_putc(1, c); /* Send to COM1:. */
}
}
com_trm(1); /* Restore interrupt vectors, etc. */
com_trm(2);
int_trm();
}
int /* Returns baud rate generator divisor. */
getdivisor(rate) /* Convert baud rate to BRG divisor. */
int rate; /* Baud rate. */
{
switch (rate) { /* Dispatch on baud rate. */
case 9600: return (12);
case 4800: return (24);
case 2400: return (48);
case 1200: return (96);
case 300: return (384);
default: return (0); /* Unrecognized rate. */
}
}